package com.titaniume.java;

import org.junit.Test;

/**
 * @author huangrenfei
 * @version 1.0
 * @description
 * @date 2021/10/3 20:44
 */
public class StringBufferBuildTest {






    /*
    * StringBuffer append(xxx)：提供了很多的append()方法，用于进行字符串拼接
    * StringBuffer delete(int start,int end)：删除指定位置的内容
    * StringBuffer replace(int start, int end, String str)：把[start,end)位置替换为str
    * StringBuffer insert(int offset, xxx)：在指定位置插入xxx StringBuffer reverse() ：把当前字符序列逆转
    * public int indexOf(String str)
    * public String substring(int start,int end) 返回一个start开始到end索引介绍的左闭右开区间的子字符串
    *  public int length()
    *  public char charAt(int n )
    *  public void setCharAt(int n ,char ch)
    *
    *
    *
    * 增  append(xxx)
    * 删  delete(int start,int end)
    * 改 setCharAt(int n,char ch) / replace(int start ,int end ,String str)
    * 查 chatAt(int n)
    * 长度 length();
    * 遍历 for + charAt()
    *
     *
    * */
    @Test
    public void test2(){
        StringBuffer sb1 = new StringBuffer();
        sb1.append("abc");
        sb1.append(12);
        System.out.println(sb1);

//        sb1.delete(2,4); //左闭右开
//        sb1.replace(2,4,"hello");
//        sb1.insert(2,false);
//        sb1.reverse();
        String s1 = sb1.substring(1, 3);
        System.out.println(s1);
        System.out.println(sb1);
        System.out.println(sb1.length());


    }



  /*
  *
  *
  * String,StringBuffer,StringBuilder 三者的异同？
  * String 不可变字符串 底层是char [] 数组存储
  * StringBuffer :可变字符串 线程安全 效率低 底层是char[] 数组存储
  * StringBuilder :   ：jdk5.0新增 线程不安全 效率高 底层是char [] 数组存储
  *
  * 源码分析：
  * String str = new String(); //char  [] value = new char[0];
  * String str1 = new String("abc"); // char  [] value = new char [] {'a','b','c'};
  *
  * StringBuffer sb1 = new StringBuffer(); //char  [] value =new char[16]; //底层创建了一个长度是16的数组
  * System.out.println(sb1.length);
  * sb1.append('a'); //value[0] = 'a';
  * sb.append('b'); //value[1]= 'b';
  *
  *StringBuffer sb2 = new StringBuffer("abc"); //char [] value = new char ["abc".length() + 16];
  * 问题1：System.out.println(sb2.length); //
  * 问题2：如果要添加的数据底层数数组存不下了 那就需要扩容数组。
  *       默认情况下，扩容情况为原来容量的2倍+2 ，同时将原有数组中的元素复制到新数组中。
  *
  *  开发中建议使用：StringBuffer(int capacity) 或StringBuild(int capacity) 指定容量
   *
  *
  *
  * */
    @Test
    public void test1(){

        StringBuffer sb1 = new StringBuffer("abc");
        sb1.setCharAt(0,'m');
        System.out.println(sb1);
        System.out.println(sb1.length());

        StringBuffer sb2 = new StringBuffer();
        System.out.println(sb2.length()); //0
    }





}
